package com.biao.synchronized_test;

/**
 * 测速线程安全问题
 */
public class Test01_ThreadCount implements Runnable {
    private int count = 100;

    @Override
    public void run() {
        while (true) {
            if (count > 1) {
//                try {
//                    Thread.sleep(30);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
                count--;
                System.out.println(Thread.currentThread().getName() + "---" + count);
            }
        }
    }

    public static void main(String[] args) {
        Test01_ThreadCount threadCount01 = new Test01_ThreadCount();
        // 让两个线程同时执行，去抢同一个资源变量
        new Thread(threadCount01).start();
        new Thread(threadCount01).start();

        /*
        如何解决线程安全的问题：
        1.	使用synchronized锁，JDK1.6开始 锁的升级过程 juc 18-25
        2.	使用Lock锁 ，需要自己实现锁的升级过程。底层是基于aqs实现
        3.	使用Threadlocal，需要注意内存泄漏的问题。
        4.	原子类 CAS 非阻塞式
         */
    }
}
